package com.dys.mvcstudy.mvc;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.dys.mvcstudy.R;
import com.dys.mvcstudy.bean.Account;
import com.dys.mvcstudy.callback.MCallBack;
import com.dys.mvcstudy.model.MVCModel;

/**
 * Controller负责协调Model和View之间的通信。这种分离关注点的设计可以使代码更加清晰、易于维护和扩展。
 */
public class MVCActivity extends AppCompatActivity implements View.OnClickListener{

    /**
     * 展示查询结果
     */
    private TextView mTvResult;

    /**
     * 用户输入信息的输入框
     */
    private EditText mEditAccount;

    /**
     * 持有Model层的数据
     */
    private MVCModel mMvcModel;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mvc);
        initView();
        mMvcModel = new MVCModel();
    }

    /**
     * 初始化View
     */
    private void initView() {
        mTvResult = findViewById(R.id.tv_result);
        mEditAccount = findViewById(R.id.et_account);
        findViewById(R.id.btn_getAccount).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        // 业务逻辑处理
        mMvcModel.getAccountData(getUserInfoByInput(), new MCallBack() {
            @Override
            public void onSuccess(Account account) {
                showSuccessPage(account);
            }

            @Override
            public void onFailure() {
                showFailedPage();
            }
        });
    }

    /**
     * 根据输入框输入的内容获取用户信息
     * @return 获取到的用户信息
     */
    private String getUserInfoByInput(){
        return mEditAccount.getText().toString();
    }

    /**
     * 获取数据成功的界面
     * @param account 账号信息
     */
    @SuppressLint("SetTextI18n")
    private void showSuccessPage(Account account) {

        mTvResult.setText("用户账号："+account.getName() + " |  用户等级："+account.getLevel());
    }

    /**
     * 获取数据失败的界面
     */
    private void showFailedPage() {
        mTvResult.setText("获取数据失败!");
    }
}
